home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 09, No. 04 (1988-04)(MicroSPARC)(Side A).zip / Nibble Volume 09, No. 04 (1988-04)(MicroSPARC)(Side A).po / PRINTWORKS.S < prev    next >
Text File  |  1996-12-24  |  8KB  |  343 lines

  1. *______________________*
  2. *                      *
  3. *     Proportional     *
  4. *      PrintWorks      *
  5. *                      *
  6. * Character  Generator *
  7. *      PRINTWORKS      *
  8. *______________________*
  9. *                      *
  10. *      Written by      *
  11. *     Bob Thrasher     *
  12. *  Copyright (C) 1987  *
  13. *  by MicroSPARC, INC  *
  14. *  Concord, MA  01742  *
  15. *______________________*
  16. *                      *
  17. *     Created with     *
  18. *      Merlin Pro      *
  19. *______________________*
  20. *                      *
  21.  
  22.           ORG $91EA
  23.  
  24. ZPage1    EQU $00        ;Temp. zero page pointer
  25. ZPage2    EQU $02        ; "
  26.  
  27.           DUM $300       ;Page 3 parameter passing area
  28. COUTVert  DS 1
  29. COUTHorL  DS 1
  30. COUTHorH  DS 1
  31. LeadingV  DS 1
  32. LeadingH  DS 1
  33. InvFlag   DS 1
  34. SPCWidth  DS 1
  35. PrintFlg  DS 1
  36. PageNum   DS 1
  37. FontNum   DS 1
  38. JMPCout   DS 4
  39. JMPHome   DS 3
  40. JMPGetK   DS 3
  41. FontSets  DS 2
  42.           DEND
  43.  
  44. Mov       MAC            ;A macro for conciseness
  45.           LDA ]1
  46.           STA ]2
  47.           <<<
  48.  
  49.           EXP OFF
  50.  
  51.           LDX #$15       ;Initialize defaults
  52. :1        Mov DUMYDATA,X ;COUTVert,X
  53.           DEX
  54.           BPL :1
  55.           LDA $BF00
  56.           CMP #$4C
  57.           BEQ :2
  58.           Mov #<PropCOUT ;$36 ;Intercept OUTPUT routine
  59.           LDY #>PropCOUT
  60.           STY $37
  61.           JSR $3EA
  62. :2        JSR YGen
  63.           JMP Home
  64.  
  65. BELL      LDY #$90       ;Special HIRES bell (^G) routine
  66. :1        TYA
  67.           TAX
  68. :2        DEX
  69.           BNE :2
  70.           BIT $C030
  71.           DEY
  72.           BNE :1
  73.           JMP Exit
  74.  
  75. PropCOUT  STA COUTChar   ;Save character to exit cleanly
  76.           TXA            ;Save both X and Y registers
  77.           PHA
  78.           TYA
  79.           PHA
  80.           LDA PrintFlg   ;See if HIRES print enabled
  81.           AND #$02
  82.           BEQ :1
  83.           LDA COUTChar   ;Check for control chars first
  84.           AND #$7F
  85.           CMP #32
  86.           BGE Prop2
  87.           CMP #$07
  88.           BEQ BELL
  89.           CMP #13
  90.           BNE Prop1
  91.           JSR CursMov1
  92. :1        JMP Exit
  93. Prop1     LDA #32        ;Filter into remaining ASCII
  94. Prop2     SEC
  95.           SBC #32
  96.           TAX
  97.           BNE :1
  98.           LDY SPCWidth
  99.           JMP DoLead
  100. :1        LDA PageNum    ;Has PageNum changed?
  101.           CMP OldPage
  102.           BEQ :4
  103.           STA OldPage
  104.           CMP #$01
  105.           BEQ :2
  106.           LDA #$20
  107.           BNE :3
  108. :2        LDA #$40
  109. :3        STA $E6
  110.           JSR YGen
  111. :4        LDA FontNum    ;Has FontNum changed?
  112.           CMP OldFont
  113.           BEQ Patch1
  114.           STA OldFont
  115.           ASL
  116.           TAY
  117.           Mov FontSets,Y ;Patch1+1
  118.           INY
  119.           Mov FontSets,Y ;Patch1+2
  120.           LDA Patch1+1
  121.           CLC
  122.           ADC #$60
  123.           STA Patch2A+1
  124.           STA Patch2B+1
  125.           LDA Patch1+2
  126.           ADC #$00
  127.           STA Patch2A+2
  128.           STA Patch2B+2
  129. Patch1    LDA $FFFF,X    ;Get the width of character
  130.           BEQ Exit       ;Width = 0, so ignore printing
  131.           STA Temp1
  132.           TXA
  133.           ASL
  134.           TAX
  135. Patch2A   LDA $FFFF,X    ;Set ZPage1 to point to data
  136.           INX
  137.           CLC
  138.           ADC Patch1+1
  139.           STA ZPage1
  140. Patch2B   LDA $FFFF,X
  141.           ADC Patch1+2
  142.           STA ZPage1+1
  143. :1        LDX COUTHorL   ;Set ByteBufr to correct values
  144.           LDY #$00       ;for printing by DrawIt
  145.           Mov (ZPage1),Y ;Temp2
  146. :2        LDA Temp2
  147.           AND #$01
  148.           BEQ :3
  149.           LDA BitTable,X
  150. :3        STA ByteBufr,Y
  151.           LSR Temp2
  152.           INY
  153.           CPY #$08
  154.           BNE :2
  155.           JSR DrawIt     ;Draw this vertical line of char
  156.           INC ZPage1     ;Move to next data byte
  157.           BNE :4
  158.           INC ZPage1+1
  159. :4        JSR CursMove   ;Advance HIRES cursor position
  160.           DEC Temp1      ;Keep going until width = 0
  161.           BNE :1
  162.           LDY LeadingH   ;Advance cursor by "LeadingH"
  163. DoLead    BEQ :2
  164.           STY Temp1
  165. :1        JSR ZeroBufr   ;Fill with empty spaces as we go
  166.           JSR DrawIt
  167.           JSR CursMove
  168.           DEC Temp1
  169.           BNE :1
  170. :2        JSR CursMov2
  171. Exit      PLA            ;Restore all registers upon exit
  172.           TAY
  173.           PLA
  174.           TAX
  175.           LDA PrintFlg   ;Need to print to ROM COUT?
  176.           AND #$01
  177.           BNE :1
  178.           LDA COUTChar
  179.           RTS
  180. :1        LDA COUTChar
  181.           JMP $FDF0
  182. DrawIt    Mov #$00       ;Temp3 ;Draw ByteBufr on screen
  183.           LDX COUTVert
  184. :1        CPX #192
  185.           BGE :3
  186.           Mov YHiresL,X  ;ZPage2
  187.           Mov YHiresH,X  ;ZPage2+1
  188.           LDY COUTHorL
  189.           LDA BitTable,Y
  190.           LDY COUTHorH
  191.           CPY #40
  192.           BGE :3
  193.           ORA (ZPage2),Y
  194.           BIT InvFlag
  195.           BMI :2
  196.           LDY COUTHorL
  197.           EOR BitTable,Y
  198. :2        LDY Temp3
  199.           EOR ByteBufr,Y
  200.           LDY COUTHorH
  201.           STA (ZPage2),Y
  202.           INX
  203.           INC Temp3
  204.           LDA Temp3
  205.           CMP #$08
  206.           BNE :1
  207. :3        RTS
  208. ZeroBufr  LDX #$07       ;Erase ByteBufr for empty lines
  209.           LDA #$00
  210. :1        STA ByteBufr,X
  211.           DEX
  212.           BPL :1
  213.           RTS
  214. CursMove  INC COUTHorL   ;Advance HIRES cursor one pixel
  215.           LDA COUTHorL
  216.           CMP #$07
  217.           BNE :1
  218.           Mov #$00       ;COUTHorL
  219.           INC COUTHorH
  220. :1        RTS
  221. CursMov2  LDA COUTHorH
  222.           CMP #39
  223.           BLT CursMov3
  224. CursMov1  Mov #$00       ;COUTHorH ;Move to start of next line
  225.           STA COUTHorL
  226.           LDA COUTVert
  227.           CLC
  228.           ADC #$08
  229.           CLC
  230.           ADC LeadingV
  231.           STA COUTVert
  232.           CMP #$C0
  233.           BLT CursMov3
  234.           Mov #$00       ;COUTVert
  235. CursMov3  RTS
  236.  
  237. * Home - This is a standard HIRES screen clear routine
  238. *        which takes the normal/inverse setting flag
  239. *        into consideration.
  240.  
  241. Home      LDY #$20
  242.           LDA PageNum
  243.           BEQ :1
  244.           BIT $C055
  245.           LDY #$40
  246.           JMP :2
  247. :1        BIT $C054
  248. :2        BIT $C050
  249.           BIT $C057
  250.           BIT $C052
  251.           STY $E6
  252.           LDA InvFlag
  253.           BEQ :3
  254.           LDA #$7F
  255. :3        STA $1C
  256.           JSR $F3F6
  257.           Mov #$00       ;COUTVert
  258.           STA COUTHorL
  259.           STA COUTHorH
  260.           RTS
  261.  
  262. * GetKey - Display blinking HIRES cursor until a key is
  263. *          pressed then return in A-reg.
  264.  
  265. GetKey    JSR :2
  266.           JSR :4
  267.           BCS :1
  268.           JSR :2
  269.           JSR :4
  270.           BCC GetKey
  271.           BIT $C010
  272.           LDA $C000
  273.           RTS
  274. :1        JSR :2
  275.           BIT $C010
  276.           LDA $C000
  277.           RTS
  278. :2        LDX COUTVert
  279.           Mov #$07       ;Temp1
  280. :3        Mov YHiresL,X  ;ZPage1
  281.           Mov YHiresH,X  ;ZPage1+1
  282.           LDY COUTHorL
  283.           LDA BitTable,Y
  284.           LDY COUTHorH
  285.           EOR (ZPage1),Y
  286.           STA (ZPage1),Y
  287.           INX
  288.           DEC Temp1
  289.           BPL :3
  290.           RTS
  291. :4        LDX #$00
  292. :5        LDA $C000
  293.           BMI :6
  294.           DEX
  295.           BNE :5
  296.           CLC
  297.           RTS
  298. :6        SEC
  299.           RTS
  300.  
  301. * YGen - Define HIRES tables according to setting of $E6
  302. *        ($20=page1, $40=page2)
  303.  
  304. YGen      TXA
  305.           PHA
  306.           TYA
  307.           PHA
  308.           Mov #191       ;Temp1 ;Start on bottom line
  309. :1        LDY #$00
  310.           JSR $F411      ;Use AppleSoft ROM to find line
  311.           LDX Temp1      ;Vertical line # for index
  312.           Mov $26        ;YHiresL,X ;Low byte into table
  313.           Mov $27        ;YHiresH,X ;High byte into table
  314.           DEC Temp1      ;Move up a line
  315.           LDA Temp1
  316.           CMP #$FF       ;Finished with top line yet?
  317.           BNE :1         ;Nope, keep going
  318.           PLA
  319.           TAY
  320.           PLA
  321.           TAX
  322.           RTS
  323.  
  324. BitTable  HEX 01020408102040          ;Mask values
  325. DUMYDATA  HEX 00000001010004010000    ;Default parms
  326.           CLD
  327.           JMP PropCOUT
  328.           JMP Home
  329.           JMP GetKey
  330.           HEX 0000
  331.  
  332. OldPage   HEX FF         ;Record keeping variables
  333. OldFont   HEX FF
  334.  
  335. Temp1     DS 1           ;Temporary variables
  336. Temp2     DS 1
  337. Temp3     DS 1
  338. COUTChar  DS 1
  339. ByteBufr  DS 8
  340.  
  341. YHiresL   EQU *
  342. YHiresH   EQU YHiresL+192
  343.